Selenium3 Python WebDriver API源码探析(6):窗口(标签)管理(切换、关闭) 您所在的位置:网站首页 python selenium切换叠加的窗口 Selenium3 Python WebDriver API源码探析(6):窗口(标签)管理(切换、关闭)

Selenium3 Python WebDriver API源码探析(6):窗口(标签)管理(切换、关闭)

2024-06-29 23:47| 来源: 网络整理| 查看: 265

WebDriver 不区分窗口和标签页。如果打开了一个新窗口(标签),可以使用窗口句柄(handle)来处理它。 每个窗口都有一个唯一的标识符,该标识符在单个会话中保持持久性。

获取当前窗口句柄

作用:获取当前窗口句柄 签名:driver.current_window_handle 调用对象:WebDriver实例 值类型:字符串

获取浏览器窗口句柄集合

作用:获取当前浏览器的窗口句柄集合 签名:driver.window_handles 调用对象:WebDriver实例 值类型:字符串列表

打开并切换新窗口

在浏览器中打开新窗口(标签)之后,虽然浏览器当前页面已经切换为新窗口,但是获取的当前句柄还是原窗口的句柄! 这个问题Selenium4中的driver.switch_to.new_window方法可以解决。 因此在Selenium3中,打开新窗口,需要获取新窗口句柄并切换,才可以继续操作。

实验:验证打开新窗口之后窗口句柄的变化 from selenium import webdriver import time driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 获取当前窗口句柄、当前窗口标题、浏览器窗口句柄列表 print(repr(driver.current_window_handle), repr( driver.window_handles), driver.title) # 打开新窗口 driver.find_element_by_xpath("//a[@target='_blank']").click() time.sleep(5) # 获取当前窗口句柄、当前窗口标题、浏览器窗口句柄列表(当前窗口句柄还是原始窗口) print(repr(driver.current_window_handle), repr( driver.window_handles), driver.title) # 关闭当前窗口(关闭的仍是原窗口) driver.close() time.sleep(5) # 获取浏览器窗口列表 print(repr(driver.window_handles))

结果:

'18' ['18'] 百度一下,你就知道 '18' ['18', '23'] 百度一下,你就知道 ['23'] 案例:打开并切换新窗口 from selenium import webdriver import time driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 获取当前窗口句柄、当前窗口标题、浏览器窗口句柄列表 old_windows = driver.window_handles print(repr(driver.current_window_handle), repr(old_windows), driver.title) # 打开新窗口 driver.find_element_by_xpath("//a[@target='_blank']").click() time.sleep(5) # 获取当前窗口句柄、当前窗口标题、浏览器窗口句柄列表 new_windows = driver.window_handles print(repr(driver.current_window_handle), repr(new_windows), driver.title) # 切换窗口 new_window = set(old_windows) ^ set(new_windows) driver.switch_to.window(list(new_window)[0]) time.sleep(5) # 获取浏览器窗口列表 print(repr(driver.current_window_handle), repr(new_windows), driver.title)

结果:

'15' ['15'] 百度一下,你就知道 '15' ['15', '23'] 百度一下,你就知道 '23' ['15', '23'] 百度新闻——海量中文资讯平台 窗口/frame切换API类别

WebDriver实例提供了两种类型的窗口切换API。

第一类:调用WebDriver实例的switch_to特性的相关方法

这种方法是Selenium推荐使用的方式,_switch_to对象是selenium\webdriver\remote\switch_to.py中的SwitchTo类实例。

源码:selenium\webdriver\remote\webdriver.py中的WebDriver类

@property def switch_to(self): """ :Returns: - SwitchTo: an object containing all options to switch focus into :Usage: element = driver.switch_to.active_element alert = driver.switch_to.alert driver.switch_to.default_content() driver.switch_to.frame('frame_name') driver.switch_to.frame(1) driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0]) driver.switch_to.parent_frame() driver.switch_to.window('main') """ return self._switch_to 第二类:调用WebDriver实例的相关方法,其实现与第一类API等价,未来会被废弃

例如:driver.switch_to_window(window_name)相当于driver.switch_to.window(window_name)

源码:selenium\webdriver\remote\webdriver.py中的WebDriver类

def switch_to_window(self, window_name): """ Deprecated use driver.switch_to.window """ warnings.warn("use driver.switch_to.window instead", DeprecationWarning, stacklevel=2) self._switch_to.window(window_name) 窗口/frame切换API

源码:selenium\webdriver\remote\switch_to.py中的SwitchTo类

active_element特性:返回当前活动元素

作用:返回当前活动元素(焦点所在元素),如果没有则返回body元素。 签名:driver.switch_to.active_element 返回值:元素,即WebElement对象 案例:打开百度首页,活动元素为搜索框;打开腾讯首页,活动元素为body元素

alert特性:将焦点切换至警告框

作用:将焦点切换至警告框。 签名:driver.switch_to.alert 返回值:元素,即WebElement对象

default_content()方法:将焦点切换至默认frame

作用:将焦点切换至警告框。 签名:driver.switch_to.default_content()

parent_frame()方法:将焦点切换至默认父frame

作用:将焦点切换至默认父frame,如果当前上下文为浏览器,焦点保持不变。 签名:driver.switch_to.parent_frame()

window(window_name)方法:将焦点切换至某窗口

作用:将焦点切换至将焦点切换至window_name窗口。 签名:driver.switch_to.window(window_name) 参数:窗口名称或者窗口句柄

frame(frame_reference)方法:将焦点切换至某frame

作用:将焦点切换至某frame。 签名:driver.switch_to.frame(frame_reference) 参数:frame名称,frame索引或frame元素引用 示例:

driver.switch_to.frame('frame_name') driver.switch_to.frame(1) driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0]) 关闭窗口

作用:如果当前浏览器有多个窗口时,关闭当前窗口。如果当前浏览器只有一个窗口时,关闭浏览器。 签名:driver.close() 调用对象:WebDriver实例

关闭浏览器

作用:关闭整个浏览器 签名:driver.quit() 调用对象:WebDriver实例



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有